package controllers

import (
	"gitee.com/tangrx/go-admin/app"
	"gitee.com/tangrx/go-admin/models"
	"github.com/gin-gonic/gin"
	"log"
)

func init() {
	app.Any("/api/sys/code", func(c *gin.Context) {

		var json models.SearchForm
		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}

		c.JSON(200, models.GetCodeList4Pager(json))
	})

	app.Any("/api/sys/codetree", func(c *gin.Context) {

		var json models.SearchForm
		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}

		c.JSON(200, gin.H{"status": "200",
			"data": models.GetCodeTree(json),
			"msg":  "",
		})
	})
	// 删除
	app.POST("/api/sys/code/delete", func(c *gin.Context) {
		var json map[string]int64

		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}
		checkNode := models.GetTreeNode(json["id"])
		if checkNode == -1 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "发生异常，请联系管理员！",
			})
			return
		}
		if checkNode > 0 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "存在子节点，不能直接删除！",
			})
			return
		}
		data := models.DeleteCode(json["id"])
		if data == 0 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "数据不存在！",
			})
			return
		}
		log.Println(data)
		c.JSON(200, gin.H{"status": "200",
			"data": nil,
			"msg":  "删除成功！",
		})
	})
	// 保存
	app.POST("/api/sys/code/save", func(c *gin.Context) {
		var json models.Code
		if err := c.ShouldBindJSON(&json); err != nil {
			c.JSON(200, gin.H{"error": err.Error()})
			return
		}
		checkNode := models.CheckNodeByKey(json.Key, json.Id)
		if checkNode == -1 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "发生异常，请联系管理员！",
			})
			return
		}
		if checkNode > 0 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "存在相同key，不能保存！",
			})
			return
		}
		if !models.CheckParentId(json.Id, json.ParentId) {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "父亲节点有问题，会构成循环，不能保存！",
			})
			return
		}
		json.UpdateId = app.GetUserId(c)
		json.CreateId = app.GetUserId(c)

		var result int64
		if json.Id == 0 {
			result = models.AddCodeData(&json)
		} else {
			result = models.UpdateCode(&json)
		}
		if result == 0 {
			c.JSON(200, gin.H{"status": "100",
				"data": nil,
				"msg":  "保存失败！",
			})
			return
		}
		log.Println(result)
		c.JSON(200, gin.H{"status": "200",
			"data": nil,
			"msg":  "保存成功！",
		})
	})

}
